9章 一貫性と合意
耐障害性を持つ分散システムを構築するためのアルゴリズムとプロトコル
最善の方法は有益な保証を持つ汎用的な抽象概念
アプリケーションが分散システムにおける幾つかの問題(network fault, process fault, clock sync delay)を無視できるようにする抽象概念を探る
合意(consensus)
全てのノードが何かについて合意すること
合意に関して実装できれば、リーダーが落ちたときにどのノードがリーダーになるかの選出の同意
合意ができないとsplit brainなどのfaultが発生する可能性がある
1. 一貫性の保証
レプリケーションを行うデータベースのほとんどは、少なくとも結果整合性(eventual consistency)を提供している。
一時的に非一貫的になっても最終的には勝手に解消される。
非常に弱い保証のため、レプリカがいつ収束するかは不明
一般的に一貫性の強さとパフォーマンス・耐障害性はトレードオフ
2. 線形化可能性
目標はレプリケーションされたデータが、あたかもデータのコピーが一つしか無いかのように見え、そのデータに対する全ての操作がアトミックに働くようにすること
理解しやすくデータベースがシングルスレッドのプログラムにおける変数のように振る舞ってくれる
速度が落ちる欠点がある
どこで役立つか
リーダーレプリケーションの選出とそのためのロック
直列化可能性との違い